影像直方圖是一種統計方法,用來描述影像中像素亮度的分布情況,能協助分析影像曝光、對比度與細節。
直方圖均衡化則能增強影像的對比度,使暗處更清晰、亮處不易過曝,提升整體視覺效果。
請準備一張圖片 image.jpg
,並放在與程式同一資料夾。
import cv2
img = cv2.imread('image.jpg', 0) # 灰階讀取
cv2.imshow('Gray Image', img)
# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()
# 計算灰階直方圖
hist = cv2.calcHist([img], [0], None, [256], [0,256])
print("直方圖前 10 筆數據:", hist[:10].T)
輸出結果
直方圖前 10 筆數據: [[ 0. 1. 0. 1. 0. 1. 5. 7. 10. 22.]]
cv2.calcHist(images, channels, mask, histSize, ranges)
# 直方圖均衡化
equalized = cv2.equalizeHist(img)
# 顯示結果
cv2.imshow("Original", img)
cv2.imshow("Equalized", equalized)
效果:原本暗的圖片會變得更清晰,細節與對比度提升。
# 讀取彩色影像
img_color = cv2.imread('image.jpg')
# 轉換到 YCrCb 色彩空間
ycrcb = cv2.cvtColor(img_color, cv2.COLOR_BGR2YCrCb)
# 只均衡化亮度通道 Y
ycrcb[:, :, 0] = cv2.equalizeHist(ycrcb[:, :, 0])
# 轉回 BGR
equalized_color = cv2.cvtColor(ycrcb, cv2.COLOR_YCrCb2BGR)
cv2.imshow("Original Color", img_color)
cv2.imshow("Equalized Color", equalized_color)
📌 功能
方法 | 說明 |
---|---|
calcHist | 計算影像的直方圖分布,分析亮度結構 |
equalizeHist | 灰階圖片直方圖均衡化,提升對比度 |
YCrCb + equalizeHist | 只針對亮度通道均衡化,保留色彩資訊,避免色偏 |
比較:灰階均衡化適合單色影像,彩色均衡化建議只處理亮度通道,能有效提升細節又不影響色彩。
直方圖能幫助我們了解影像的亮度分布,而直方圖均衡化則能有效改善影像的對比度與細節。
在彩色圖片中,通常只針對亮度通道進行均衡化,避免破壞原有色彩。這些技術在醫學影像、監控、低光源場景等應用中非常實用。